#ifndef _PROBLEM_H_
#define _PROBLEM_H_
/**************************************************//*!
 *
 * \file    Problem.h
 * \brief   Problem base class defination
 *
 * \author  Terence Wu
 * \date    Sep. 2009
 *
 ****************************************************/

#include "fftgpu.h"

#include <vector>
#include <list>

typedef struct DimStruct
{
    int n;
    int stride;

    DimStruct(int _n = 0, int _stride = 0) : n(_n), stride(_stride) {}
} Dim;

typedef struct TwiddleParam
{
    int n1;
    int stride;
    int n2;
} TwParam;

class Problem
{
public:
    inline Problem() 
    {
        fftDim.clear();
        iDim.clear();
        oDim.clear();
        twParam.n1 = 0;
        twParam.n2 = 0;
        twParam.stride = 0;
    }

    inline ~Problem() 
    {
        fftDim.clear();
        iDim.clear();
        oDim.clear();
    }

    TwParam twParam;

    std::vector<int>  fftDim;
    std::list<Dim> iDim;
    std::list<Dim> oDim;

};


#endif //_PROBLEM_H_